/// 图算法管理演示
/// 
/// 展示：
/// 1. 加权边和权重管理
/// 2. 因果链追踪
/// 3. AI主动删除低权重边
/// 4. 关系强化/弱化

use neurosymbolic_ai::{KnowledgeGraph, Relation};

fn main() {
    println!("╔════════════════════════════════════════════════════════════╗");
    println!("║          高级图算法演示                                    ║");
    println!("║     Advanced Graph Management Demo                       ║");
    println!("║                                                           ║");
    println!("║     • 加权边                                               ║");
    println!("║     • 因果链                                               ║");
    println!("║     • 自动修剪                                             ║");
    println!("╚════════════════════════════════════════════════════════════╝\n");

    demo_weighted_relations();
    println!("\n{}\n", "=".repeat(60));
    demo_causal_chain();
    println!("\n{}\n", "=".repeat(60));
    demo_auto_pruning();
}

/// 演示1：加权关系
fn demo_weighted_relations() {
    println!("【演示1】加权关系系统\n");
    
    let mut kg = KnowledgeGraph::new();
    
    // 添加概念
    kg.add_concept("数据", "信息的表示", "用户");
    kg.add_concept("机器学习", "从数据中学习", "用户");
    kg.add_concept("人工智能", "智能系统", "用户");
    
    // 添加关系
    println!("📝 添加关系...");
    kg.add_relation(Relation::Requires("机器学习".to_string(), "数据".to_string()));
    kg.add_relation(Relation::IsA("机器学习".to_string(), "人工智能".to_string()));
    kg.add_relation(Relation::Causes("数据".to_string(), "机器学习".to_string()));
    
    // 查看高权重关系
    println!("\n🔥 高权重关系 (>0.5):");
    for (rel, weight) in kg.get_strong_relations(0.5) {
        println!("  • {} [权重: {:.2}]", rel, weight);
    }
    
    // 多次使用同一关系会增强权重
    println!("\n♻️  重复添加关系以增强权重...");
    kg.add_relation(Relation::Requires("机器学习".to_string(), "数据".to_string()));
    kg.add_relation(Relation::Requires("机器学习".to_string(), "数据".to_string()));
    
    println!("\n🔥 再次查看关系（权重应该增加）:");
    for (rel, weight) in kg.get_strong_relations(0.5) {
        println!("  • {} [权重: {:.2}]", rel, weight);
    }
}

/// 演示2：因果链
fn demo_causal_chain() {
    println!("【演示2】因果链追踪\n");
    
    let mut kg = KnowledgeGraph::new();
    
    // 构建因果链
    println!("🔗 构建因果链...");
    kg.add_concept("学习", "获取知识", "系统");
    kg.add_concept("知识", "经验积累", "系统");
    kg.add_concept("智能", "运用知识的能力", "系统");
    kg.add_concept("创新", "创造新想法", "系统");
    
    kg.add_relation(Relation::Causes("学习".to_string(), "知识".to_string()));
    kg.add_relation(Relation::Causes("知识".to_string(), "智能".to_string()));
    kg.add_relation(Relation::Causes("智能".to_string(), "创新".to_string()));
    
    println!("  学习 → 知识 → 智能 → 创新\n");
    
    // 追踪因果链
    println!("🔍 从'学习'开始追踪因果链:");
    let chain = kg.get_causal_chain("学习");
    for (i, step) in chain.iter().enumerate() {
        println!("  {}. {}", i + 1, step);
    }
    
    if chain.is_empty() {
        println!("  （未发现因果链）");
    }
}

/// 演示3：自动修剪
fn demo_auto_pruning() {
    println!("【演示3】AI主动管理边权重\n");
    
    let mut kg = KnowledgeGraph::new();
    kg.set_auto_prune(true, 0.3); // 启用自动修剪，阈值0.3
    
    // 添加一些关系
    println!("📝 添加多个关系...");
    kg.add_concept("a", "概念A", "test");
    kg.add_concept("b", "概念B", "test");
    kg.add_concept("c", "概念C", "test");
    kg.add_concept("d", "概念D", "test");
    
    kg.add_relation(Relation::Similar("a".to_string(), "b".to_string()));
    kg.add_relation(Relation::Similar("b".to_string(), "c".to_string()));
    kg.add_relation(Relation::Similar("c".to_string(), "d".to_string()));
    
    println!("  初始关系数: {}\n", kg.get_stats().split('\n').count());
    
    // 弱化某些边
    println!("⚠️  AI发现某些关系不太可靠，开始弱化...");
    kg.weaken_relation("a 类似于 b", 0.3);
    kg.weaken_relation("a 类似于 b", 0.3);
    
    println!("\n🔥 剩余的高权重关系:");
    for (rel, weight) in kg.get_strong_relations(0.3) {
        println!("  • {} [权重: {:.2}]", rel, weight);
    }
    
    // 主动修剪
    println!("\n🧹 AI主动修剪低权重边...");
    let removed = kg.prune_weak_relations();
    println!("  删除了 {} 个低权重边", removed);
    
    println!("\n📊 最终知识图谱状态:");
    println!("{}", kg.get_stats());
}

